// 购物车模块
import { insertCart, findCartList, deleteCart } from '@/api/cart'

// 创建vuex实例化对象
const cart = {
  namespaced: true,
  state: () => ({
    // 数据
    // 为了刷新不丢失 存储到本地
    // 购物车列表
    cartList: []
  }),
  mutations: {
    // 修改数据
    setList (state, list) {
      state.cartList = list
    }
  },
  // 基于state的计算属性
  getters: {
    // 数组中每一项的count之和 累加起来
    allCount (state) {
      return state.cartList.reduce((a, c) => a + c.count, 0)
    },
    // 数组中的每一项中count*price 累加起来
    allPrice (state) {
      return state.cartList.reduce((a, c) => a + c.count * c.price, 0)
    }
  },
  actions: {
    // 请求数据
    // 加入购物车
    async insertCart (ctx, { skuId, count }) {
      // 加入购物车
      await insertCart({ skuId, count })
      // 获取购物车列表
      const res = await findCartList()
      // 拿到数据传入vuex
      ctx.commit('setList', res.data.result)
    },
    // 删除购物车
    async delCart (ctx, ids) {
      // 调用删除接口
      // ids必须是数组
      await deleteCart(ids)
      // 重新获取列表数据
      const res = await findCartList()
      // 赋值到vuex
      ctx.commit('setList', res.data.result)
    }
  }

}

export default cart
